deleteCatalogOrder
- ๐ฌ๐ง English
- ๐ฎ๐น Italiano
Function Name: deleteCatalogOrder
Author: Domenico Cerone Creation Date: 09/10/2025
Last Reviewer: Domenico Cerone
Trigger: HTTPS (onRequest)
Purpose: Deletes all Products and Variants associated with a CatalogOrder. The CatalogOrder is marked as 'cancelled' but NOT deleted.
Detailed Functionalityโ
This Firebase Function performs the following operations in sequence:
1. Input Validationโ
- Accepts
catalogOrderIdas required parameter - Validates that the ID is not empty or null
- Returns 400 error for invalid input
2. CatalogOrder Loadingโ
- Loads the document from
CatalogOrderscollection using the provided ID - Verifies document existence (returns 404 if not found)
- Extracts
list_3d_assets_resultsarray containing related products - Each element contains:
skuCode,productRef,variantRef,eanCode,upcCode, etc.
3. Related Documents Deletion (Batch Processing)โ
- Batch Processing: Processes elements in batches of 10 for optimal performance
- Parallel Processing: Elements within each batch are processed in parallel
- Sequential Batches: Batches are processed sequentially with 200ms delay between them
- For each element in
list_3d_assets_results:- Extracts
productRef(e.g., "xAohrMTJYHFwmCXXEHu0") - Deletes document from
Productscollection usingproductRefas ID - Extracts
variantRef(e.g., "IRQyGSgmjKK5qivFR2FH") - Deletes document from
Variantscollection usingvariantRefas ID
- Extracts
- Handles errors for individual documents without interrupting the entire process
- Tracks deletion statistics (successes/errors)
4. CatalogOrder Status Updateโ
- After deleting all related documents
- Updates the CatalogOrder document setting
status: 'cancelled' - Adds
cancelledAttimestamp andcancelledByfield - Does NOT delete the CatalogOrder document (only marks it as cancelled)
5. Error Handling and Resilienceโ
- Individual Document Errors: Continues processing even if single documents fail
- Missing References: Handles cases where
productReforvariantRefare missing - Non-existent Documents: Considers already deleted documents as successful operations
- Batch Error Recovery: If an entire batch fails, marks all elements as failed but continues
- Comprehensive Logging: Detailed logging with unique request IDs for tracking
6. Performance Optimizationโ
- Memory: 1GiB allocated for handling large volumes
- Timeout: 30 minutes (1800 seconds) for processing large catalogs
- Batch Size: 10 elements per batch to balance performance and memory usage
- Parallel Processing: Within-batch parallel execution for faster processing
- Delay Management: 200ms delay between batches to avoid overwhelming Firestore
7. Response Logicโ
The function returns detailed statistics including:
- Deletion Counts: Separate counts for Products and Variants
- Operation Statistics: Total processed, successful, and failed operations
- CatalogOrder Status: Whether the order was successfully marked as cancelled
- Detailed Results: Array with results for each processed element
- Request Tracking: Unique request ID for operation tracking
8. Status Codesโ
- 200: Complete success (all operations successful)
- 207: Partial success (some operations failed but CatalogOrder was cancelled)
- 400: Invalid input (missing or empty catalogOrderId)
- 404: CatalogOrder not found
- 500: Server error during processing
Input (Payload):โ
For the HTTP function:
{
"catalogOrderId": "5AdIae1rNiSfaRa1HyyL"
}
Output (Success):โ
{
"success": true,
"catalogOrderId": "5AdIae1rNiSfaRa1HyyL",
"deletedProducts": 3,
"deletedVariants": 3,
"totalProcessed": 6,
"successfulOperations": 6,
"failedOperations": 0,
"catalogOrderCancelled": true,
"message": "Products e Variants eliminati con successo, CatalogOrder 5AdIae1rNiSfaRa1HyyL marcato come cancelled",
"requestId": "DEL_1234567890_abc123def",
"deletionDetails": [
{
"success": true,
"index": 0,
"skuCode": "3102687C55110",
"productRef": "xAohrMTJYHFwmCXXEHu0",
"variantRef": "IRQyGSgmjKK5qivFR2FH",
"successfulDeletions": 2,
"failedDeletions": 0,
"deletionResults": [
{
"type": "Product",
"success": true,
"collection": "Products",
"documentId": "xAohrMTJYHFwmCXXEHu0",
"message": "Documento eliminato con successo",
"wasDeleted": true
},
{
"type": "Variant",
"success": true,
"collection": "Variants",
"documentId": "IRQyGSgmjKK5qivFR2FH",
"message": "Documento eliminato con successo",
"wasDeleted": true
}
],
"message": "Elemento 1 (SKU: 3102687C55110): 2 successi, 0 errori"
}
]
}
Output (Error):โ
{
"success": false,
"catalogOrderId": "5AdIae1rNiSfaRa1HyyL",
"message": "CatalogOrder con ID 5AdIae1rNiSfaRa1HyyL non trovato",
"requestId": "DEL_1234567890_abc123def"
}
Testingโ
URL (if HTTPS): http://127.0.0.1:5001/arshadesstaging/europe-central2/deleteCatalogOrder
Test with Emulator:
- Start the Firebase emulator:
firebase emulators:start --only functions - Ensure you're using Node.js version 20:
nvm use 20 - Test with curl:
curl -X POST "http://127.0.0.1:5001/arshadesstaging/europe-central2/deleteCatalogOrder" \
-H "Content-Type: application/json" \
-d '{"catalogOrderId": "5AdIae1rNiSfaRa1HyyL"}'
Postman Testing:
- Method: POST
- URL: http://127.0.0.1:5001/arshadesstaging/europe-central2/deleteCatalogOrder
- Headers:
- Key:
Content-Type - Value:
application/json
- Key:
- Body: raw JSON (see examples above)
Deploy Command:โ
firebase deploy --only functions:deleteCatalogOrder
Production URL:โ
Live Function: https://europe-central2-arshades-7e18a.cloudfunctions.net/deleteCatalogOrder
Function Name: deleteCatalogOrder
Autore: Domenico Cerone Data di creazione: 09/10/2025
Last Reviewer: Domenico Cerone
Trigger: HTTPS (onRequest)
Purpose: Elimina tutti i Products e Variants associati a un CatalogOrder. Il CatalogOrder viene marcato come 'cancelled' ma NON eliminato.
Funzionamento Dettagliatoโ
Questa Firebase Function esegue le seguenti operazioni in sequenza:
1. Validazione Inputโ
- Accetta
catalogOrderIdcome parametro obbligatorio - Valida che l'ID non sia vuoto o null
- Restituisce errore 400 per input non validi
2. Caricamento CatalogOrderโ
- Carica il documento dalla collezione
CatalogOrdersutilizzando l'ID fornito - Verifica l'esistenza del documento (restituisce 404 se non trovato)
- Estrae l'array
list_3d_assets_resultscontenente i prodotti correlati - Ogni elemento contiene:
skuCode,productRef,variantRef,eanCode,upcCode, ecc.
3. Eliminazione Documenti Correlati (Batch Processing)โ
- Batch Processing: Processa gli elementi in batch da 10 per prestazioni ottimali
- Processing Parallelo: Gli elementi all'interno di ogni batch sono processati in parallelo
- Batch Sequenziali: I batch sono processati sequenzialmente con delay di 200ms tra di essi
- Per ogni elemento in
list_3d_assets_results:- Estrae
productRef(es. "xAohrMTJYHFwmCXXEHu0") - Elimina documento dalla collezione
ProductsusandoproductRefcome ID - Estrae
variantRef(es. "IRQyGSgmjKK5qivFR2FH") - Elimina documento dalla collezione
VariantsusandovariantRefcome ID
- Estrae
- Gestisce errori per singoli documenti senza interrompere l'intero processo
- Traccia statistiche di eliminazione (successi/errori)
4. Aggiornamento Status CatalogOrderโ
- Dopo aver eliminato tutti i documenti correlati
- Aggiorna il documento CatalogOrder impostando
status: 'cancelled' - Aggiunge timestamp
cancelledAte campocancelledBy - NON elimina il documento CatalogOrder (lo marca solo come cancellato)
5. Gestione Errori e Resilienzaโ
- Errori Singoli Documenti: Continua il processing anche se singoli documenti falliscono
- Riferimenti Mancanti: Gestisce casi dove
productRefovariantRefsono mancanti - Documenti Non Esistenti: Considera documenti giร eliminati come operazioni riuscite
- Recupero Errori Batch: Se un intero batch fallisce, marca tutti gli elementi come falliti ma continua
- Logging Completo: Logging dettagliato con ID richiesta unici per il tracking
6. Ottimizzazione Performanceโ
- Memoria: 1GiB allocata per gestire grandi volumi
- Timeout: 30 minuti (1800 secondi) per processare cataloghi grandi
- Dimensione Batch: 10 elementi per batch per bilanciare performance e uso memoria
- Processing Parallelo: Esecuzione parallela intra-batch per processing piรน veloce
- Gestione Delay: Delay di 200ms tra batch per evitare di sovraccaricare Firestore
7. Logica di Rispostaโ
La funzione restituisce statistiche dettagliate incluse:
- Conteggi Eliminazione: Conteggi separati per Products e Variants
- Statistiche Operazioni: Totale processate, riuscite e fallite
- Status CatalogOrder: Se l'ordine รจ stato marcato con successo come cancellato
- Risultati Dettagliati: Array con risultati per ogni elemento processato
- Tracking Richiesta: ID richiesta unico per il tracking dell'operazione
8. Codici di Statusโ
- 200: Successo completo (tutte le operazioni riuscite)
- 207: Successo parziale (alcune operazioni fallite ma CatalogOrder cancellato)
- 400: Input non valido (catalogOrderId mancante o vuoto)
- 404: CatalogOrder non trovato
- 500: Errore server durante il processing
Input (Payload):โ
Per la funzione HTTP:
{
"catalogOrderId": "5AdIae1rNiSfaRa1HyyL"
}
Output (Success):โ
{
"success": true,
"catalogOrderId": "5AdIae1rNiSfaRa1HyyL",
"deletedProducts": 3,
"deletedVariants": 3,
"totalProcessed": 6,
"successfulOperations": 6,
"failedOperations": 0,
"catalogOrderCancelled": true,
"message": "Products e Variants eliminati con successo, CatalogOrder 5AdIae1rNiSfaRa1HyyL marcato come cancelled",
"requestId": "DEL_1234567890_abc123def",
"deletionDetails": [
{
"success": true,
"index": 0,
"skuCode": "3102687C55110",
"productRef": "xAohrMTJYHFwmCXXEHu0",
"variantRef": "IRQyGSgmjKK5qivFR2FH",
"successfulDeletions": 2,
"failedDeletions": 0,
"deletionResults": [
{
"type": "Product",
"success": true,
"collection": "Products",
"documentId": "xAohrMTJYHFwmCXXEHu0",
"message": "Documento eliminato con successo",
"wasDeleted": true
},
{
"type": "Variant",
"success": true,
"collection": "Variants",
"documentId": "IRQyGSgmjKK5qivFR2FH",
"message": "Documento eliminato con successo",
"wasDeleted": true
}
],
"message": "Elemento 1 (SKU: 3102687C55110): 2 successi, 0 errori"
}
]
}
Output (Error):โ
{
"success": false,
"catalogOrderId": "5AdIae1rNiSfaRa1HyyL",
"message": "CatalogOrder con ID 5AdIae1rNiSfaRa1HyyL non trovato",
"requestId": "DEL_1234567890_abc123def"
}
Testingโ
URL (if HTTPS): http://127.0.0.1:5001/arshadesstaging/europe-central2/deleteCatalogOrder
Test with Emulator:
- Avviare l'emulatore Firebase:
firebase emulators:start --only functions - Assicurarsi di usare Node.js versione 20:
nvm use 20 - Testare con curl:
curl -X POST "http://127.0.0.1:5001/arshadesstaging/europe-central2/deleteCatalogOrder" \
-H "Content-Type: application/json" \
-d '{"catalogOrderId": "5AdIae1rNiSfaRa1HyyL"}'
Postman Testing:
- Metodo: POST
- URL: http://127.0.0.1:5001/arshadesstaging/europe-central2/deleteCatalogOrder
- Headers:
- Key:
Content-Type - Value:
application/json
- Key:
- Body: raw JSON (vedi esempi sopra)
Deploy Command:โ
firebase deploy --only functions:deleteCatalogOrder
URL di Produzione:โ
Funzione Live: https://europe-central2-arshades-7e18a.cloudfunctions.net/deleteCatalogOrder